package com.quick.develop.flowable.service.definition;

import com.quick.develop.flowable.domain.vo.group.BpmGroupUserVO;
import com.quick.develop.framework.common.page.PageResult;
import com.quick.develop.flowable.domain.group.BpmGroupPageReqVO;
import org.flowable.idm.api.User;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author junyuan.liu
 * @description: TODO
 * @date 2022/5/19 19:00
 */
public interface IBpmGroupUserService {

    /**
     * @param reqVO 请求体
     * @return PageResult<BpmUserGroupVO>
     * @description TODO 组别分页查询
     * @author junyuan.liu
     * @date 2022/5/23 9:56
     */
    PageResult<BpmGroupUserVO> getGroupUserPage(BpmGroupPageReqVO reqVO);

    /**
     * @param id 组ID
     * @return java.util.List<org.flowable.idm.api.User>
     * @description TODO 通过组ID获取关联的user
     * @author junyuan.liu
     * @date 2022/5/23 10:29
     */
    List<User> getUserByGroup(String id);

    default Map<String, List<User>> getGroupUserMap(Set<String> ids) {
        Map<String, List<User>> map = new HashMap<>();
        ids.forEach(i -> {
            map.put(i, getUserByGroup(i));
        });
        return map;
    }

    /**
     * @param reqVo 请求体
     * @return java.util.List<com.quick.develop.flowable.domain.vo.group.BpmGroupUserVO>
     * @description TODO 获取组集合
     * @author junyuan.liu
     * @date 2022/5/24 9:55
     */
    List<BpmGroupUserVO> getGroupList(BpmGroupUserVO reqVo);

    /**
     * @param reqVo 请求体
     * @description 新增用户组 用户
     * @author junyuan.liu
     * @date 2022/5/19 19:04
     */
    void addGroupUser(BpmGroupUserVO reqVo);

    /**
     * @param reqVo 请求体
     * @description 更新组用户
     * @author junyuan.liu
     * @date 2022/5/19 19:51
     */
    void updateGroupUser(BpmGroupUserVO reqVo);

    /**
     * @param reqVo 请求体
     * @description TODO 删除组和成员的关系
     * @author junyuan.liu
     * @date 2022/5/22 16:27
     */
    void deleteGroupUser(BpmGroupUserVO reqVo);
}
